
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

/**
 * Class: Grid
 * Dit gaat de kamers en muren bevatten
 * @author frankkie
 */
public class Grid extends JPanel {

  int breedtekamer;
  int hoogtekamer;
  int muurdikteh;
  int muurdiktev;
  int aantal = 3;
  Spel spel;
  Kamer[][] kamers = new Kamer[aantal][aantal];

  /**
   * Constructor Grid
   * maakt een instantie van het Grid-Object
   * dit object gaat de kamers en muren bevatten.
   * @param spel
   */
  public Grid(Spel spel) {
    System.out.println("Grid.Grid");
    this.spel = spel;
    //Kamers Maken
    for (int yy = 0; yy < aantal; yy++) {
      for (int xx = 0; xx < aantal; xx++) {
        System.out.println("Grid.Grid: kamers.add(new Kamer(" + xx + "," + yy + ",this));");
        kamers[xx][yy] = new Kamer(xx, yy, this);
        this.addMouseListener(this.getMuurh(kamers[xx][yy]));
        this.addMouseListener(this.getMuurv(kamers[xx][yy]));
      }
    }
    System.out.println("=================================\nGrid.Grid: Klaar met het maken van de Kamers");
    //Einde Kamers Maken
  }

  /**
   * Paint de Grid
   * (Override)
   * @see javax.swing.JComponent
   * @param g Graphics
   */
  @Override
  protected void paintComponent(Graphics g) {
    int hoogteGrid = this.getHeight()-((this.getHeight()/aantal)/10);
    int breedteGrid = this.getWidth()-((this.getWidth()/aantal)/10);
    breedtekamer = 0+ (breedteGrid / aantal);
    hoogtekamer = 0+ (hoogteGrid / aantal);
    muurdikteh = 0+(hoogtekamer/10);
    muurdiktev = 0+(breedtekamer/10);
    System.out.println("Grid.paintComponent");
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    if (kamers.length > 0) {
      for (int yy = 0; yy < aantal; yy++) {
        for (int xx = 0; xx < aantal; xx++) {
          kamers[xx][yy].tekenKamer(g);
        }
      }
    }
  }

  /**
   * Geef de horizontale muur uit de Kamer
   * @see Muur
   * @param kamer
   * @return muur de horizontale muur van die kamer
   */
  public Muur getMuurh(Kamer kamer) {
    System.out.println("Grid.getMuurh");
    return kamer.getMuur(1);
  }

  /**
   * Geef de vertikale muur uit de kamer
   * @see Muur
   * @param kamer
   * @return muur de vertikale muur van die kamer
   */
  public Muur getMuurv(Kamer kamer) {
    System.out.println("Grid.getMuurv");
    return kamer.getMuur(0);
  }

  /**
   * Return-t of alle kamers compleet zijn,
   * een kamer is compleet als het 4 muren heeft.
   * @return boolean of alle kamers compleet zijn
   */
  public boolean alleKamersCompleet() {
    System.out.println("Grid.alleKamersCompleet");
    for (int a = 0; a < kamers.length; a++) {
      for (int b = 0; b < kamers.length; b++) {
        if (!kamers[b][a].compleet) {
          return false;
        }
      }
    }
    return true;
  }

  /**
   * Telt alle punten van de spelers
   * Wordt gebruikt aan het einde van het spel
   * @return int[] punten voor elke speler
   */
  public int[] telPunten() {
    System.out.println("Grid.telPunten");
    int[] ans = new int[2];
    for (int a = 0; a < kamers.length; a++) {
      for (int b = 0; b < kamers.length; b++) {
        if (kamers[b][a].isMijn) {
          ans[0]++;
        } else {
          ans[1]++;
        }
      }
    }
    return ans;
  }
}
